package com.dimples;

import com.dimples.service.UserService;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author zhongyj <1126834403@qq.com><br/>
 * @date 2020/1/20
 */
@ComponentScan("com.dimples")
public class AnnoApplication {

	public static void main(String[] args) {
		/**
		 * 1、spring容器完成扫描 --- class ---- bd --- bdMap
		 * 2、开始遍历这个bdMap
		 * 3、parse bd 解析 beanDefinition
		 * 4、validate
		 * 5、推断构造方法
		 * 6、利用构造方法 -- 反射执行 -- 实例化对象
		 * 7、判断这个对象是否需要合并
		 * 8、判断 这个对象是否需要提前暴露一个工厂？如果需要提前暴露 -- 会缓存
		 * 9、自动注入 --- 填充属性
		 * 10、回调部分各种的aware方法
		 * 11、执行BeanPostProcessor 的 before 方法 --- 回调剩下的部分aware方法，还会执行部分生命周期初始化回调方法
		 * 12、再次执行部分的生命周期初始化回调方法
		 * 13、执行BeanPostProcessor after方法 -- aop -- 事件发布
		 * 14、put 单例池
		 */
		ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AnnoApplication.class);

		UserService userService = applicationContext.getBean(UserService.class);
		System.out.println("UserService.class = " + userService);
		userService.print();


	}

}
